package com.example.backend.common.validator;

import com.example.backend.dto.RegisterDTO;
import com.example.backend.common.exception.BusinessException;
import com.example.backend.common.api.ResultCode;
import org.springframework.stereotype.Component;

/**
 * 注册参数校验器
 */
@Component
public class RegisterValidator {
    
    /**
     * 校验注册参数
     */
    public void validate(RegisterDTO registerDTO) {
        // 1. 校验密码一致性
        if (!registerDTO.getPassword().equals(registerDTO.getConfirmPassword())) {
            throw new BusinessException(ResultCode.PASSWORD_NOT_MATCH);
        }
        
        // 2. 校验密码强度
        validatePassword(registerDTO.getPassword());
        
        // 3. 校验邮箱格式
        validateEmail(registerDTO.getEmail());
        
        // 4. 校验手机号格式
        validatePhone(registerDTO.getPhone());
    }
    
    /**
     * 校验密码强度
     */
    private void validatePassword(String password) {
        // 至少包含一个大写字母、一个小写字母、一个数字
        String pattern = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[a-zA-Z\\d]{6,16}$";
        if (!password.matches(pattern)) {
            throw new BusinessException(ResultCode.INVALID_PASSWORD);
        }
    }
    
    /**
     * 校验邮箱格式
     */
    private void validateEmail(String email) {
        String pattern = "^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$";
        if (!email.matches(pattern)) {
            throw new BusinessException(ResultCode.INVALID_EMAIL);
        }
    }
    
    /**
     * 校验手机号格式
     */
    private void validatePhone(String phone) {
        if (phone != null && !phone.matches("^1[3-9]\\d{9}$")) {
            throw new BusinessException(ResultCode.INVALID_PHONE);
        }
    }
} 